{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts.globals import CurrentConfig, OnlineHostType\n",
    "\n",
    "import numpy as np \n",
    "import pandas as pd \n",
    "import matplotlib.pyplot as plt  #pandas自带的图形包\n",
    "import os\n",
    "from pyecharts.charts import Pie, Map, Bar, Line, Grid, Page, Funnel, Geo #插件可以绘制很酷炫的图形\n",
    "from pyecharts import options as opts \n",
    "from pyecharts.globals import ThemeType, ChartType, GeoType\n",
    "import xlwt, xlrd\n",
    "import csv\n",
    "\n",
    "# matplotlib可以正常显示汉字\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入写入的广州二手房数据\n",
    "df = pd.read_csv(r'./广州二手房源信息.csv')\n",
    "#加入区，方便后面数据处理\n",
    "df['region'] = df.region + \"区\"\n",
    "#对houseInfo进行数据处理\n",
    "df.houseInfo\n",
    "\n",
    "#查询有多少车位信息\n",
    "df[df['houseInfo'].str.split('|').str[0].str.strip() == '车位']\n",
    "#去除爬取到的车位的数据\n",
    "df = df.drop(index=(df.loc[(df['houseInfo'].str.split('|').str[0].str.strip() == '车位')].index))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>HouseName</th>\n",
       "      <th>Address</th>\n",
       "      <th>totalPrice</th>\n",
       "      <th>unitPrice</th>\n",
       "      <th>region</th>\n",
       "      <th>Type</th>\n",
       "      <th>area</th>\n",
       "      <th>direction</th>\n",
       "      <th>dectype</th>\n",
       "      <th>floor</th>\n",
       "      <th>year</th>\n",
       "      <th>banta</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>223.0</td>\n",
       "      <td>39554</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>东</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>320.0</td>\n",
       "      <td>36489</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>2室2厅</td>\n",
       "      <td>87.7</td>\n",
       "      <td>西南</td>\n",
       "      <td>精装</td>\n",
       "      <td>低楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>212.0</td>\n",
       "      <td>37602</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>北</td>\n",
       "      <td>精装</td>\n",
       "      <td>高楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>375.0</td>\n",
       "      <td>38620</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>97.1</td>\n",
       "      <td>东南</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共33层)</td>\n",
       "      <td>NaN</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>370.0</td>\n",
       "      <td>40022</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>92.45</td>\n",
       "      <td>东</td>\n",
       "      <td>精装</td>\n",
       "      <td>高楼层(共33层)</td>\n",
       "      <td>NaN</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64939</th>\n",
       "      <td>68620</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>320.0</td>\n",
       "      <td>34855</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>91.81</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64940</th>\n",
       "      <td>68621</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>115.0</td>\n",
       "      <td>31892</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>36.06</td>\n",
       "      <td>东南 西南</td>\n",
       "      <td>精装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>NaN</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64941</th>\n",
       "      <td>68622</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>210.0</td>\n",
       "      <td>28611</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.4</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64942</th>\n",
       "      <td>68623</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>184.0</td>\n",
       "      <td>25035</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.5</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64943</th>\n",
       "      <td>68624</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>178.0</td>\n",
       "      <td>25071</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>71</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>62843 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Unnamed: 0 HouseName Address  totalPrice  unitPrice region   Type  \\\n",
       "0               0    中海誉城北苑      香雪       223.0      39554    黄埔区  1室1厅    \n",
       "1               1    中海誉城北苑      香雪       320.0      36489    黄埔区  2室2厅    \n",
       "2               2    中海誉城北苑      香雪       212.0      37602    黄埔区  1室1厅    \n",
       "3               3    中海誉城北苑      香雪       375.0      38620    黄埔区  3室2厅    \n",
       "4               4    中海誉城北苑      香雪       370.0      40022    黄埔区  3室2厅    \n",
       "...           ...       ...     ...         ...        ...    ...    ...   \n",
       "64939       68620       华仙楼     沙太南       320.0      34855    越秀区  3室2厅    \n",
       "64940       68621       华仙楼     沙太南       115.0      31892    越秀区  1室1厅    \n",
       "64941       68622       田美居     同德围       210.0      28611    越秀区  2室1厅    \n",
       "64942       68623       田美居     同德围       184.0      25035    越秀区  2室1厅    \n",
       "64943       68624       田美居     同德围       178.0      25071    越秀区  2室1厅    \n",
       "\n",
       "        area direction dectype         floor  year banta  \n",
       "0      56.38        东      精装     中楼层(共33层)   2012    塔楼  \n",
       "1       87.7       西南      精装     低楼层(共33层)   2012    塔楼  \n",
       "2      56.38        北      精装     高楼层(共33层)   2012    塔楼  \n",
       "3       97.1       东南      精装    中楼层(共33层)     NaN    塔楼  \n",
       "4      92.45        东      精装    高楼层(共33层)     NaN    塔楼  \n",
       "...      ...       ...     ...           ...   ...   ...  \n",
       "64939  91.81      南 北      其他      高楼层(共9层)   1999    塔楼  \n",
       "64940  36.06    东南 西南      精装     高楼层(共9层)     NaN    塔楼  \n",
       "64941   73.4        南      简装      高楼层(共9层)   1999    塔楼  \n",
       "64942   73.5        南      简装      高楼层(共9层)   1999    塔楼  \n",
       "64943     71      南 北      其他      高楼层(共9层)   1999    塔楼  \n",
       "\n",
       "[62843 rows x 13 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#获取楼盘户型\n",
    "df['Type'] = df['houseInfo'].str.split('|').str[0]\n",
    "\n",
    "#获取建筑面积\n",
    "df['area'] = df['houseInfo'].str.split('|').str[1].str.extract(r'(\\d+.*\\d+)平米')\n",
    "\n",
    "#获取朝向\n",
    "df['direction'] = df['houseInfo'].str.split('|').str[2]\n",
    "\n",
    "#获取装修类型\n",
    "df['dectype'] = df['houseInfo'].str.split('|').str[3]\n",
    "\n",
    "#获取楼层\n",
    "df['floor'] = df['houseInfo'].str.split('|').str[4]\n",
    "\n",
    "#获取建筑年份\n",
    "df['year'] = df['houseInfo'].str.split('|').str[5].str.extract(r'(\\d+.)年建')\n",
    "\n",
    "#获取板塔\n",
    "df['banta'] = df['houseInfo'].str.split('|').str[-1]\n",
    "\n",
    "#删除houseInfo列\n",
    "df = df.drop('houseInfo', axis = 1)\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Unnamed: 0        0\n",
       "HouseName         0\n",
       "Address           0\n",
       "totalPrice        0\n",
       "unitPrice         0\n",
       "region            0\n",
       "Type              0\n",
       "area              0\n",
       "direction         0\n",
       "dectype           0\n",
       "floor             0\n",
       "year          12143\n",
       "banta             0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看空值\n",
    "df.isnull().sum()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>HouseName</th>\n",
       "      <th>Address</th>\n",
       "      <th>totalPrice</th>\n",
       "      <th>unitPrice</th>\n",
       "      <th>region</th>\n",
       "      <th>Type</th>\n",
       "      <th>area</th>\n",
       "      <th>direction</th>\n",
       "      <th>dectype</th>\n",
       "      <th>floor</th>\n",
       "      <th>year</th>\n",
       "      <th>banta</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>223.0</td>\n",
       "      <td>39554</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>东</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>320.0</td>\n",
       "      <td>36489</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>2室2厅</td>\n",
       "      <td>87.7</td>\n",
       "      <td>西南</td>\n",
       "      <td>精装</td>\n",
       "      <td>低楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>212.0</td>\n",
       "      <td>37602</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>北</td>\n",
       "      <td>精装</td>\n",
       "      <td>高楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>210.0</td>\n",
       "      <td>37254</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.37</td>\n",
       "      <td>东北</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共21层)</td>\n",
       "      <td>2013</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>446.0</td>\n",
       "      <td>36489</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>3室1厅</td>\n",
       "      <td>122.23</td>\n",
       "      <td>南</td>\n",
       "      <td>精装</td>\n",
       "      <td>低楼层(共33层)</td>\n",
       "      <td>2015</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64938</th>\n",
       "      <td>68619</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>275.0</td>\n",
       "      <td>29954</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>91.81</td>\n",
       "      <td>东南</td>\n",
       "      <td>简装</td>\n",
       "      <td>中楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64939</th>\n",
       "      <td>68620</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>320.0</td>\n",
       "      <td>34855</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>91.81</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64941</th>\n",
       "      <td>68622</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>210.0</td>\n",
       "      <td>28611</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.4</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64942</th>\n",
       "      <td>68623</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>184.0</td>\n",
       "      <td>25035</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.5</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64943</th>\n",
       "      <td>68624</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>178.0</td>\n",
       "      <td>25071</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>71</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>50700 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Unnamed: 0 HouseName Address  totalPrice  unitPrice region   Type  \\\n",
       "0               0    中海誉城北苑      香雪       223.0      39554    黄埔区  1室1厅    \n",
       "1               1    中海誉城北苑      香雪       320.0      36489    黄埔区  2室2厅    \n",
       "2               2    中海誉城北苑      香雪       212.0      37602    黄埔区  1室1厅    \n",
       "5               5    中海誉城北苑      香雪       210.0      37254    黄埔区  1室1厅    \n",
       "6               6    中海誉城北苑      香雪       446.0      36489    黄埔区  3室1厅    \n",
       "...           ...       ...     ...         ...        ...    ...    ...   \n",
       "64938       68619       华仙楼     沙太南       275.0      29954    越秀区  3室2厅    \n",
       "64939       68620       华仙楼     沙太南       320.0      34855    越秀区  3室2厅    \n",
       "64941       68622       田美居     同德围       210.0      28611    越秀区  2室1厅    \n",
       "64942       68623       田美居     同德围       184.0      25035    越秀区  2室1厅    \n",
       "64943       68624       田美居     同德围       178.0      25071    越秀区  2室1厅    \n",
       "\n",
       "         area direction dectype        floor  year banta  \n",
       "0       56.38        东      精装    中楼层(共33层)   2012    塔楼  \n",
       "1        87.7       西南      精装    低楼层(共33层)   2012    塔楼  \n",
       "2       56.38        北      精装    高楼层(共33层)   2012    塔楼  \n",
       "5       56.37       东北      精装    中楼层(共21层)   2013    塔楼  \n",
       "6      122.23        南      精装    低楼层(共33层)   2015    塔楼  \n",
       "...       ...       ...     ...          ...   ...   ...  \n",
       "64938   91.81       东南      简装     中楼层(共9层)   1999    塔楼  \n",
       "64939   91.81      南 北      其他     高楼层(共9层)   1999    塔楼  \n",
       "64941    73.4        南      简装     高楼层(共9层)   1999    塔楼  \n",
       "64942    73.5        南      简装     高楼层(共9层)   1999    塔楼  \n",
       "64943      71      南 北      其他     高楼层(共9层)   1999    塔楼  \n",
       "\n",
       "[50700 rows x 13 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除空值\n",
    "df = df.dropna()\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将处理后的信息保存到csv\n",
    "df.to_csv('广州二手房数据清洗结果.csv')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>Unnamed: 0.1</th>\n",
       "      <th>HouseName</th>\n",
       "      <th>Address</th>\n",
       "      <th>totalPrice</th>\n",
       "      <th>unitPrice</th>\n",
       "      <th>region</th>\n",
       "      <th>Type</th>\n",
       "      <th>area</th>\n",
       "      <th>direction</th>\n",
       "      <th>dectype</th>\n",
       "      <th>floor</th>\n",
       "      <th>year</th>\n",
       "      <th>banta</th>\n",
       "      <th>pcut</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>223.0</td>\n",
       "      <td>39554</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>东</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>320.0</td>\n",
       "      <td>36489</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>2室2厅</td>\n",
       "      <td>87.70</td>\n",
       "      <td>西南</td>\n",
       "      <td>精装</td>\n",
       "      <td>低楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300-500万</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>212.0</td>\n",
       "      <td>37602</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.38</td>\n",
       "      <td>北</td>\n",
       "      <td>精装</td>\n",
       "      <td>高楼层(共33层)</td>\n",
       "      <td>2012</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>210.0</td>\n",
       "      <td>37254</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>1室1厅</td>\n",
       "      <td>56.37</td>\n",
       "      <td>东北</td>\n",
       "      <td>精装</td>\n",
       "      <td>中楼层(共21层)</td>\n",
       "      <td>2013</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>中海誉城北苑</td>\n",
       "      <td>香雪</td>\n",
       "      <td>446.0</td>\n",
       "      <td>36489</td>\n",
       "      <td>黄埔区</td>\n",
       "      <td>3室1厅</td>\n",
       "      <td>122.23</td>\n",
       "      <td>南</td>\n",
       "      <td>精装</td>\n",
       "      <td>低楼层(共33层)</td>\n",
       "      <td>2015</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300-500万</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50695</th>\n",
       "      <td>64938</td>\n",
       "      <td>68619</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>275.0</td>\n",
       "      <td>29954</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>91.81</td>\n",
       "      <td>东南</td>\n",
       "      <td>简装</td>\n",
       "      <td>中楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50696</th>\n",
       "      <td>64939</td>\n",
       "      <td>68620</td>\n",
       "      <td>华仙楼</td>\n",
       "      <td>沙太南</td>\n",
       "      <td>320.0</td>\n",
       "      <td>34855</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>3室2厅</td>\n",
       "      <td>91.81</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300-500万</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50697</th>\n",
       "      <td>64941</td>\n",
       "      <td>68622</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>210.0</td>\n",
       "      <td>28611</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.40</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50698</th>\n",
       "      <td>64942</td>\n",
       "      <td>68623</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>184.0</td>\n",
       "      <td>25035</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>73.50</td>\n",
       "      <td>南</td>\n",
       "      <td>简装</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50699</th>\n",
       "      <td>64943</td>\n",
       "      <td>68624</td>\n",
       "      <td>田美居</td>\n",
       "      <td>同德围</td>\n",
       "      <td>178.0</td>\n",
       "      <td>25071</td>\n",
       "      <td>越秀区</td>\n",
       "      <td>2室1厅</td>\n",
       "      <td>71.00</td>\n",
       "      <td>南 北</td>\n",
       "      <td>其他</td>\n",
       "      <td>高楼层(共9层)</td>\n",
       "      <td>1999</td>\n",
       "      <td>塔楼</td>\n",
       "      <td>300万及以下</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>50700 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Unnamed: 0  Unnamed: 0.1 HouseName Address  totalPrice  unitPrice  \\\n",
       "0               0             0    中海誉城北苑      香雪       223.0      39554   \n",
       "1               1             1    中海誉城北苑      香雪       320.0      36489   \n",
       "2               2             2    中海誉城北苑      香雪       212.0      37602   \n",
       "3               5             5    中海誉城北苑      香雪       210.0      37254   \n",
       "4               6             6    中海誉城北苑      香雪       446.0      36489   \n",
       "...           ...           ...       ...     ...         ...        ...   \n",
       "50695       64938         68619       华仙楼     沙太南       275.0      29954   \n",
       "50696       64939         68620       华仙楼     沙太南       320.0      34855   \n",
       "50697       64941         68622       田美居     同德围       210.0      28611   \n",
       "50698       64942         68623       田美居     同德围       184.0      25035   \n",
       "50699       64943         68624       田美居     同德围       178.0      25071   \n",
       "\n",
       "      region   Type    area direction dectype        floor  year banta  \\\n",
       "0        黄埔区  1室1厅    56.38        东      精装    中楼层(共33层)   2012    塔楼   \n",
       "1        黄埔区  2室2厅    87.70       西南      精装    低楼层(共33层)   2012    塔楼   \n",
       "2        黄埔区  1室1厅    56.38        北      精装    高楼层(共33层)   2012    塔楼   \n",
       "3        黄埔区  1室1厅    56.37       东北      精装    中楼层(共21层)   2013    塔楼   \n",
       "4        黄埔区  3室1厅   122.23        南      精装    低楼层(共33层)   2015    塔楼   \n",
       "...      ...    ...     ...       ...     ...          ...   ...   ...   \n",
       "50695    越秀区  3室2厅    91.81       东南      简装     中楼层(共9层)   1999    塔楼   \n",
       "50696    越秀区  3室2厅    91.81      南 北      其他     高楼层(共9层)   1999    塔楼   \n",
       "50697    越秀区  2室1厅    73.40        南      简装     高楼层(共9层)   1999    塔楼   \n",
       "50698    越秀区  2室1厅    73.50        南      简装     高楼层(共9层)   1999    塔楼   \n",
       "50699    越秀区  2室1厅    71.00      南 北      其他     高楼层(共9层)   1999    塔楼   \n",
       "\n",
       "           pcut  \n",
       "0       300万及以下  \n",
       "1      300-500万  \n",
       "2       300万及以下  \n",
       "3       300万及以下  \n",
       "4      300-500万  \n",
       "...         ...  \n",
       "50695   300万及以下  \n",
       "50696  300-500万  \n",
       "50697   300万及以下  \n",
       "50698   300万及以下  \n",
       "50699   300万及以下  \n",
       "\n",
       "[50700 rows x 15 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#打开数据\n",
    "df_result = pd.read_csv(r'./广州二手房数据清洗结果.csv')\n",
    "\n",
    "\n",
    "#设置分割点\n",
    "bins = [0, 300, 500, 800, 1000, 10000]\n",
    "bins_label = ['300万及以下', '300-500万', '500-800万', '800-1000万', '1000万及以上']\n",
    "\n",
    "#插入新列\n",
    "df_result['pcut'] = pd.cut(df_result.totalPrice, bins, right = False, labels = bins_label)\n",
    "df_result\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "300万及以下      32946\n",
       "300-500万     11323\n",
       "500-800万      4210\n",
       "1000万及以上      1281\n",
       "800-1000万      939\n",
       "Name: pcut, dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "#对数据进行分组、统计、排序\n",
    "price_num = df_result['pcut'].value_counts()\n",
    "price_num\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['300万及以下', 32946],\n",
       " ['300-500万', 11323],\n",
       " ['500-800万', 4210],\n",
       " ['1000万及以上', 1281],\n",
       " ['800-1000万', 939]]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "#转换为列表对值\n",
    "data_pair = [list(z) for z in zip(price_num.index.tolist(), price_num.values.tolist())]\n",
    "data_pair"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script>\n",
       "    require.config({\n",
       "        paths: {\n",
       "            'echarts':'https://assets.pyecharts.org/assets/echarts.min'\n",
       "        }\n",
       "    });\n",
       "</script>\n",
       "\n",
       "        <div id=\"7b8de0efe3884c1fa68555b0dd64a6c9\" style=\"width:900px; height:500px;\"></div>\n",
       "\n",
       "<script>\n",
       "        require(['echarts'], function(echarts) {\n",
       "                var chart_7b8de0efe3884c1fa68555b0dd64a6c9 = echarts.init(\n",
       "                    document.getElementById('7b8de0efe3884c1fa68555b0dd64a6c9'), 'white', {renderer: 'canvas'});\n",
       "                var option_7b8de0efe3884c1fa68555b0dd64a6c9 = {\n",
       "    \"animation\": true,\n",
       "    \"animationThreshold\": 2000,\n",
       "    \"animationDuration\": 1000,\n",
       "    \"animationEasing\": \"cubicOut\",\n",
       "    \"animationDelay\": 0,\n",
       "    \"animationDurationUpdate\": 300,\n",
       "    \"animationEasingUpdate\": \"cubicOut\",\n",
       "    \"animationDelayUpdate\": 0,\n",
       "    \"color\": [\n",
       "        \"#FF7F0E\",\n",
       "        \"#1F77B4\",\n",
       "        \"#2CA02C\",\n",
       "        \"#D62728\",\n",
       "        \"#976C8B\"\n",
       "    ],\n",
       "    \"series\": [\n",
       "        {\n",
       "            \"type\": \"pie\",\n",
       "            \"clockwise\": true,\n",
       "            \"data\": [\n",
       "                {\n",
       "                    \"name\": \"300\\u4e07\\u53ca\\u4ee5\\u4e0b\",\n",
       "                    \"value\": 32946\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"300-500\\u4e07\",\n",
       "                    \"value\": 11323\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"500-800\\u4e07\",\n",
       "                    \"value\": 4210\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"1000\\u4e07\\u53ca\\u4ee5\\u4e0a\",\n",
       "                    \"value\": 1281\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"800-1000\\u4e07\",\n",
       "                    \"value\": 939\n",
       "                }\n",
       "            ],\n",
       "            \"radius\": [\n",
       "                \"30%\",\n",
       "                \"60%\"\n",
       "            ],\n",
       "            \"center\": [\n",
       "                \"50%\",\n",
       "                \"50%\"\n",
       "            ],\n",
       "            \"roseType\": \"radius\",\n",
       "            \"label\": {\n",
       "                \"show\": true,\n",
       "                \"position\": \"top\",\n",
       "                \"margin\": 8,\n",
       "                \"formatter\": \"{b}:{d}%\"\n",
       "            },\n",
       "            \"rippleEffect\": {\n",
       "                \"show\": true,\n",
       "                \"brushType\": \"stroke\",\n",
       "                \"scale\": 2.5,\n",
       "                \"period\": 4\n",
       "            }\n",
       "        }\n",
       "    ],\n",
       "    \"legend\": [\n",
       "        {\n",
       "            \"data\": [\n",
       "                \"300\\u4e07\\u53ca\\u4ee5\\u4e0b\",\n",
       "                \"300-500\\u4e07\",\n",
       "                \"500-800\\u4e07\",\n",
       "                \"1000\\u4e07\\u53ca\\u4ee5\\u4e0a\",\n",
       "                \"800-1000\\u4e07\"\n",
       "            ],\n",
       "            \"selected\": {},\n",
       "            \"show\": true,\n",
       "            \"left\": \"2%\",\n",
       "            \"top\": \"15%\",\n",
       "            \"orient\": \"vertical\",\n",
       "            \"padding\": 5,\n",
       "            \"itemGap\": 10,\n",
       "            \"itemWidth\": 25,\n",
       "            \"itemHeight\": 14\n",
       "        }\n",
       "    ],\n",
       "    \"tooltip\": {\n",
       "        \"show\": true,\n",
       "        \"trigger\": \"item\",\n",
       "        \"triggerOn\": \"mousemove|click\",\n",
       "        \"axisPointer\": {\n",
       "            \"type\": \"line\"\n",
       "        },\n",
       "        \"showContent\": true,\n",
       "        \"alwaysShowContent\": false,\n",
       "        \"showDelay\": 0,\n",
       "        \"hideDelay\": 100,\n",
       "        \"textStyle\": {\n",
       "            \"fontSize\": 14\n",
       "        },\n",
       "        \"borderWidth\": 0,\n",
       "        \"padding\": 5\n",
       "    },\n",
       "    \"title\": [\n",
       "        {\n",
       "            \"text\": \"\\u5e7f\\u5dde\\u4e8c\\u624b\\u623f\\u90fd\\u5904\\u5728\\u54ea\\u4e9b\\u4ef7\\u4f4d\\uff1f\",\n",
       "            \"padding\": 5,\n",
       "            \"itemGap\": 10\n",
       "        }\n",
       "    ]\n",
       "};\n",
       "                chart_7b8de0efe3884c1fa68555b0dd64a6c9.setOption(option_7b8de0efe3884c1fa68555b0dd64a6c9);\n",
       "        });\n",
       "    </script>\n"
      ],
      "text/plain": [
       "<pyecharts.render.display.HTML at 0x209c7773c10>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#绘制饼图\n",
    "pie1 = Pie(init_opts=opts.InitOpts(width='900px', height='500px'))\n",
    "pie1.add('', data_pair=data_pair, radius=['30%', '60%'], rosetype='radius')\n",
    "pie1.set_global_opts(title_opts=opts.TitleOpts(title='广州二手房都处在哪些价位？'), \n",
    "                     legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))\n",
    "pie1.set_series_opts(label_opts=opts.LabelOpts(formatter=\"{b}:{d}%\"))\n",
    "pie1.set_colors(['#FF7F0E', '#1F77B4', '#2CA02C', '#D62728', '#976C8B'])\n",
    "\n",
    "#显示图形\n",
    "pie1.render_notebook()\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "番禺区    13716\n",
       "天河区     8548\n",
       "白云区     7129\n",
       "海珠区     6728\n",
       "黄埔区     3974\n",
       "增城区     2988\n",
       "荔湾区     2226\n",
       "花都区     2130\n",
       "越秀区     2074\n",
       "从化区      767\n",
       "南沙区      420\n",
       "Name: region, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对房源区域数据进行分组、统计、排序\n",
    "region_num = df['region'].value_counts()\n",
    "region_num\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['番禺区', 13716],\n",
       " ['天河区', 8548],\n",
       " ['白云区', 7129],\n",
       " ['海珠区', 6728],\n",
       " ['黄埔区', 3974],\n",
       " ['增城区', 2988],\n",
       " ['荔湾区', 2226],\n",
       " ['花都区', 2130],\n",
       " ['越秀区', 2074],\n",
       " ['从化区', 767],\n",
       " ['南沙区', 420]]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#转换为列表对象\n",
    "data_region_pair = [list(z) for z in zip(region_num.index.tolist(), region_num.values.tolist())]\n",
    "data_region_pair\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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umm1oaioiCFDhrBhg43t98477zBx4kSuvfZajjnmGBYvXkx2dja5ubnk5ubSt29fhg8fXm69qLy8PFatWsWJJ56YaHfOObddqJdAEkYrfQS7AzdW9O5gwvAPjVW1N7CPiOybbFpt5btx48bMmDGDVq1aAdC/f38yMzOZN28e+fn59O7du2TZL7/8ksLCQjIyMsqtB7B582aGDx9O165deeGFF2ory845V+vqq0RSjA0dUTKTndiUnhuwYbrBxip6MjyeBfSpRloZIpIlIgUiUrB69er4l5PWqlUrWrduXSZNVZkxYwZt27aladPSuX4mTZpEdnZ2hetNmzaN7t27M3bsWPLz87nrrrtwzrntUb0EElX9NjpYHEAYdvt6yo5I2hybOwFsRrXdq5EWv7/7VTVDVTM6dEjYe22biQiTJk3i4IMP5sUXXwRg69at5OTkEIlEKlxvyZIlZGVl0alTJy644AJycpIdYso559JLujS2Xw3cEzsiKza4XHT61BZYXpNNqxO33XYb06ZNA2Dt2rW0adMGsLaPXr16VTQwIADdunVj2TKb96egoIAuXbrUen6dc642pEsgORq4LExp2iNMsvMWpdVUh2DzNCSbVieysrKYPn06/fr1o7i4mEGDBgHw+uuv069fv0rXHTp0KDk5OfTr14977rmHMWPi50ByzrntQ70O2igiuaoaSZQW5qfIA/6BDdudiQ2JXWVabLVZvIyMDPUbEp1zrnpE5C1VzUj4WjqP/ht6dw0E5qnqquqkVSTVQNL16le2ed3KLJ9wfK1s1znnakJlgSSth0hR1SJKe2RVK80551zdSJc2Euecc9spDyTOOedS4oHEOedcSjyQOOecS4kHEueccynxQOKccy4lHkicc86lxAOJc865lHggcc45lxIPJM4551LigcQ551xKPJA455xLiQcS55xzKfFA4pxzLiUeSJxzzqXEA4lzzrmUeCBxzjmXEg8kzjnnUuKBxDnnXEo8kDjnnEuJBxLnnHMpqbdAIiK7i0heeNxaRF4TkVki8pyINAvpU0VkgYhcF7NeUmnOOefqRr0EEhFpCzwCNA9J5wMTVXUQsAo4VkROAxqram9gHxHZN9m0uj8i55zbcdVXiaQYOBv4FkBV71HV2eG1DsBXQAR4MqTNAvpUI80551wdqZdAoqrfquq6+HQR6Q20VdWFWGnl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YWEhPXv2rK/sO5dWar7XlnPbgXfeeYeJEyeSmZlJUVERgwYN4rXXXiMzM5Ozzz6b3NxcsrOzyc7OBmDUqFEMGTKkZP0xY8awcaN3SnQOPJC4HVT//v0BmDdvHvn5+bRt25ZDDz0UgI4dO7Ju3bqSZb/88ksKCwvJyMgAYO7cuTRv3pxOnTrVfcadS0NeteV2WKrKjBkzaNu2LRdffDE33XQTL730EjNnzuSoo44qWW7SpEklJZNNmzZx8803M2HChPrKtnNpxwOJ22GJCJMmTeLggw/m5z//OYMHD2bKlCkMGTKEFi1aALB161ZycnKIRCIATJgwgZEjR9KmTZv6y7hzaSbtAomI7C4iS8LjqSKyQESui3k9qTTnKnPbbbcxbZqNQ7p27VratGlDjx49+Oyzzxg9enTJcnl5efTq1QsRm9ttzpw5TJo0iUgkwtKlSxk2bFi95N+5dJJ2gQT4M7CLiJwGNFbV3sA+IrJvsmn1mHe3ncjKymL69On069eP4uJiBg0axO23387o0aPZddddS5Z7/fXX6devX8nzefPmkZubS25uLj169GDKlCn1kX3n0kpaNbaLyJHABmAVEAGeDC/NAvoAPZNM+yRuu1lAFsBee+1Va/l324+2bdsye/bsMmk33XRTueVuvfXWCreRm5tb09lybruUNoFERJphQ9CfCjyPTaD1ZXh5DXBoNdLKUNX7gfsBMjIytFYOwG0Xul79Sq1te/mE42tt286ls3Sq2roauEdV14bn3wG7hMctsLwmm+acc66OpNNJ92jgMhHJBXoAJ2LVVACHYJNlvZVkmnPOuTqSNlVbqlrSohmCyUlAnojsAQwGMgFNMs0551wdSacSSQlVjajqt1iD+0JggKquSzatfnLtnHM7prQpkSSiqkWU9siqVppzzrm6kZYlEuecc9sPDyTO1YF169YxePBgBg0axKmnnspHH31Ubtj6oqIijjvuODIyMkqGrE+U5ly68UDiXB147LHHGD16NLNmzaJTp0707t2b66+/nry8PL744gtyc3OZPn06559/PgUFBaxfv56CgoKEac6lm7RuI3GuoRg5cmTJ49WrV/P999+XG7a+ffv2vPfee6xdu5bPP/+czp07J0xzLt14icS5OrRgwQKKioq47rrryg1b36dPH1asWMGdd97JAQccQLt27RKmOZduvETiXB1Z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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1.简单的条形图\n",
    "fig = plt.figure()\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']#SimHeri是中文字体名称\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "plt.title('广州区域房源数量条形图')\n",
    "plt.xlabel('房源区域',fontsize=18,color='red')\n",
    "plt.ylabel('房源数量',fontsize=18,color='red')\n",
    "\n",
    "x = region_num.index.tolist()\n",
    "y = region_num.values.tolist()\n",
    "\n",
    "rects = plt.bar(x, y)\n",
    "\n",
    "for rect in rects:\n",
    "    height = rect.get_height()\n",
    "    plt.text(rect.get_x() + rect.get_width() / 2, height+20, str(height), ha=\"center\", va=\"bottom\")\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#求出各个区域的房价总和\n",
    "panyu_num = df[df['region'] == '番禺区']['totalPrice'].sum()\n",
    "tianhe_num = df[df['region'] == '天河区']['totalPrice'].sum()\n",
    "baiyun_num = df[df['region'] == '白云区']['totalPrice'].sum()\n",
    "haizhu_num = df[df['region'] == '海珠区']['totalPrice'].sum()\n",
    "huangpu_num = df[df['region'] == '黄埔区']['totalPrice'].sum()\n",
    "zengcheng_num = df[df['region'] == '增城区']['totalPrice'].sum()\n",
    "liwan_num = df[df['region'] == '荔湾区']['totalPrice'].sum()\n",
    "huadu_num = df[df['region'] == '花都区']['totalPrice'].sum()\n",
    "yuexiu_num = df[df['region'] == '越秀区']['totalPrice'].sum()\n",
    "conghua_num = df[df['region'] == '从化区']['totalPrice'].sum()\n",
    "nansha_num = df[df['region'] == '南沙区']['totalPrice'].sum()\n",
    "\n",
    "#求出各地区房价平均值\n",
    "panyu_avg = int(panyu_num / region_num['番禺区'])\n",
    "tianhe_avg = int(tianhe_num / region_num['天河区'])\n",
    "baiyun_avg = int(baiyun_num / region_num['白云区'])\n",
    "haizhu_avg = int(haizhu_num / region_num['海珠区'])\n",
    "huangpu_avg = int(huangpu_num / region_num['黄埔区'])\n",
    "zengcheng_avg = int(zengcheng_num / region_num['增城区'])\n",
    "liwan_avg = int(liwan_num / region_num['荔湾区'])\n",
    "huadu_avg = int(huadu_num / region_num['花都区'])\n",
    "yuexiu_avg = int(yuexiu_num / region_num['越秀区'])\n",
    "conghua_avg = int(conghua_num / region_num['从化区'])\n",
    "nansha_avg = int(nansha_num / region_num['南沙区'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pyecharts.charts.basic_charts.bar.Bar at 0x209c7773a90>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看区域房源和平均房价关系\n",
    "x = region_num.index.tolist()\n",
    "a = region_num.values.tolist()\n",
    "b = [panyu_avg, tianhe_avg, baiyun_avg, haizhu_avg, huangpu_avg, zengcheng_avg, liwan_avg, huadu_avg, yuexiu_avg, conghua_avg, nansha_avg]\n",
    "bar = (Bar()\n",
    "      .add_xaxis(x)\n",
    "      .add_yaxis('广州各区域房源数量', a))\n",
    "line = (Line(init_opts=opts.InitOpts(theme = ThemeType.SHINE))\n",
    "       .add_xaxis(x)\n",
    "       .add_yaxis('广州各区域房源平均价格（万）', b, markline_opts=opts.MarkLineOpts(data = [opts.MarkLineItem(type_=\"average\")]))\n",
    "       .set_global_opts(title_opts=opts.TitleOpts(title=\"广州二手房区域平均价格情况\",subtitle=\"测试\")))\n",
    "\n",
    "bar.overlap(line)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script>\n",
       "    require.config({\n",
       "        paths: {\n",
       "            'echarts':'https://assets.pyecharts.org/assets/echarts.min'\n",
       "        }\n",
       "    });\n",
       "</script>\n",
       "\n",
       "        <div id=\"719022ecb01c4b5080d08a6244c3dbaf\" style=\"width:900px; height:500px;\"></div>\n",
       "\n",
       "<script>\n",
       "        require(['echarts'], function(echarts) {\n",
       "                var chart_719022ecb01c4b5080d08a6244c3dbaf = echarts.init(\n",
       "                    document.getElementById('719022ecb01c4b5080d08a6244c3dbaf'), 'white', {renderer: 'canvas'});\n",
       "                var option_719022ecb01c4b5080d08a6244c3dbaf = {\n",
       "    \"animation\": true,\n",
       "    \"animationThreshold\": 2000,\n",
       "    \"animationDuration\": 1000,\n",
       "    \"animationEasing\": \"cubicOut\",\n",
       "    \"animationDelay\": 0,\n",
       "    \"animationDurationUpdate\": 300,\n",
       "    \"animationEasingUpdate\": \"cubicOut\",\n",
       "    \"animationDelayUpdate\": 0,\n",
       "    \"color\": [\n",
       "        \"#c23531\",\n",
       "        \"#2f4554\",\n",
       "        \"#61a0a8\",\n",
       "        \"#d48265\",\n",
       "        \"#749f83\",\n",
       "        \"#ca8622\",\n",
       "        \"#bda29a\",\n",
       "        \"#6e7074\",\n",
       "        \"#546570\",\n",
       "        \"#c4ccd3\",\n",
       "        \"#f05b72\",\n",
       "        \"#ef5b9c\",\n",
       "        \"#f47920\",\n",
       "        \"#905a3d\",\n",
       "        \"#fab27b\",\n",
       "        \"#2a5caa\",\n",
       "        \"#444693\",\n",
       "        \"#726930\",\n",
       "        \"#b2d235\",\n",
       "        \"#6d8346\",\n",
       "        \"#ac6767\",\n",
       "        \"#1d953f\",\n",
       "        \"#6950a1\",\n",
       "        \"#918597\"\n",
       "    ],\n",
       "    \"series\": [\n",
       "        {\n",
       "            \"type\": \"bar\",\n",
       "            \"name\": \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u6570\\u91cf\",\n",
       "            \"legendHoverLink\": true,\n",
       "            \"data\": [\n",
       "                13716,\n",
       "                8548,\n",
       "                7129,\n",
       "                6728,\n",
       "                3974,\n",
       "                2988,\n",
       "                2226,\n",
       "                2130,\n",
       "                2074,\n",
       "                767,\n",
       "                420\n",
       "            ],\n",
       "            \"showBackground\": false,\n",
       "            \"barMinHeight\": 0,\n",
       "            \"barCategoryGap\": \"20%\",\n",
       "            \"barGap\": \"30%\",\n",
       "            \"large\": false,\n",
       "            \"largeThreshold\": 400,\n",
       "            \"seriesLayoutBy\": \"column\",\n",
       "            \"datasetIndex\": 0,\n",
       "            \"clip\": true,\n",
       "            \"zlevel\": 0,\n",
       "            \"z\": 2,\n",
       "            \"label\": {\n",
       "                \"show\": true,\n",
       "                \"position\": \"top\",\n",
       "                \"margin\": 8\n",
       "            }\n",
       "        },\n",
       "        {\n",
       "            \"type\": \"line\",\n",
       "            \"name\": \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u5e73\\u5747\\u4ef7\\u683c\\uff08\\u4e07\\uff09\",\n",
       "            \"connectNulls\": false,\n",
       "            \"symbolSize\": 4,\n",
       "            \"showSymbol\": true,\n",
       "            \"smooth\": false,\n",
       "            \"clip\": true,\n",
       "            \"step\": false,\n",
       "            \"data\": [\n",
       "                [\n",
       "                    \"\\u756a\\u79ba\\u533a\",\n",
       "                    310\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u5929\\u6cb3\\u533a\",\n",
       "                    304\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u767d\\u4e91\\u533a\",\n",
       "                    298\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u6d77\\u73e0\\u533a\",\n",
       "                    337\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u9ec4\\u57d4\\u533a\",\n",
       "                    312\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u589e\\u57ce\\u533a\",\n",
       "                    281\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u8354\\u6e7e\\u533a\",\n",
       "                    350\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u82b1\\u90fd\\u533a\",\n",
       "                    301\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u8d8a\\u79c0\\u533a\",\n",
       "                    325\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u4ece\\u5316\\u533a\",\n",
       "                    278\n",
       "                ],\n",
       "                [\n",
       "                    \"\\u5357\\u6c99\\u533a\",\n",
       "                    218\n",
       "                ]\n",
       "            ],\n",
       "            \"hoverAnimation\": true,\n",
       "            \"label\": {\n",
       "                \"show\": true,\n",
       "                \"position\": \"top\",\n",
       "                \"margin\": 8\n",
       "            },\n",
       "            \"lineStyle\": {\n",
       "                \"show\": true,\n",
       "                \"width\": 1,\n",
       "                \"opacity\": 1,\n",
       "                \"curveness\": 0,\n",
       "                \"type\": \"solid\"\n",
       "            },\n",
       "            \"areaStyle\": {\n",
       "                \"opacity\": 0\n",
       "            },\n",
       "            \"markLine\": {\n",
       "                \"silent\": false,\n",
       "                \"precision\": 2,\n",
       "                \"label\": {\n",
       "                    \"show\": true,\n",
       "                    \"position\": \"top\",\n",
       "                    \"margin\": 8\n",
       "                },\n",
       "                \"data\": [\n",
       "                    {\n",
       "                        \"type\": \"average\"\n",
       "                    }\n",
       "                ]\n",
       "            },\n",
       "            \"zlevel\": 0,\n",
       "            \"z\": 0\n",
       "        }\n",
       "    ],\n",
       "    \"legend\": [\n",
       "        {\n",
       "            \"data\": [\n",
       "                \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u6570\\u91cf\",\n",
       "                \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u5e73\\u5747\\u4ef7\\u683c\\uff08\\u4e07\\uff09\"\n",
       "            ],\n",
       "            \"selected\": {\n",
       "                \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u6570\\u91cf\": true,\n",
       "                \"\\u5e7f\\u5dde\\u5404\\u533a\\u57df\\u623f\\u6e90\\u5e73\\u5747\\u4ef7\\u683c\\uff08\\u4e07\\uff09\": true\n",
       "            }\n",
       "        }\n",
       "    ],\n",
       "    \"tooltip\": {\n",
       "        \"show\": true,\n",
       "        \"trigger\": \"item\",\n",
       "        \"triggerOn\": \"mousemove|click\",\n",
       "        \"axisPointer\": {\n",
       "            \"type\": \"line\"\n",
       "        },\n",
       "        \"showContent\": true,\n",
       "        \"alwaysShowContent\": false,\n",
       "        \"showDelay\": 0,\n",
       "        \"hideDelay\": 100,\n",
       "        \"textStyle\": {\n",
       "            \"fontSize\": 14\n",
       "        },\n",
       "        \"borderWidth\": 0,\n",
       "        \"padding\": 5\n",
       "    },\n",
       "    \"xAxis\": [\n",
       "        {\n",
       "            \"show\": true,\n",
       "            \"scale\": false,\n",
       "            \"nameLocation\": \"end\",\n",
       "            \"nameGap\": 15,\n",
       "            \"gridIndex\": 0,\n",
       "            \"inverse\": false,\n",
       "            \"offset\": 0,\n",
       "            \"splitNumber\": 5,\n",
       "            \"minInterval\": 0,\n",
       "            \"splitLine\": {\n",
       "                \"show\": false,\n",
       "                \"lineStyle\": {\n",
       "                    \"show\": true,\n",
       "                    \"width\": 1,\n",
       "                    \"opacity\": 1,\n",
       "                    \"curveness\": 0,\n",
       "                    \"type\": \"solid\"\n",
       "                }\n",
       "            },\n",
       "            \"data\": [\n",
       "                \"\\u756a\\u79ba\\u533a\",\n",
       "                \"\\u5929\\u6cb3\\u533a\",\n",
       "                \"\\u767d\\u4e91\\u533a\",\n",
       "                \"\\u6d77\\u73e0\\u533a\",\n",
       "                \"\\u9ec4\\u57d4\\u533a\",\n",
       "                \"\\u589e\\u57ce\\u533a\",\n",
       "                \"\\u8354\\u6e7e\\u533a\",\n",
       "                \"\\u82b1\\u90fd\\u533a\",\n",
       "                \"\\u8d8a\\u79c0\\u533a\",\n",
       "                \"\\u4ece\\u5316\\u533a\",\n",
       "                \"\\u5357\\u6c99\\u533a\"\n",
       "            ]\n",
       "        }\n",
       "    ],\n",
       "    \"yAxis\": [\n",
       "        {\n",
       "            \"show\": true,\n",
       "            \"scale\": false,\n",
       "            \"nameLocation\": \"end\",\n",
       "            \"nameGap\": 15,\n",
       "            \"gridIndex\": 0,\n",
       "            \"inverse\": false,\n",
       "            \"offset\": 0,\n",
       "            \"splitNumber\": 5,\n",
       "            \"minInterval\": 0,\n",
       "            \"splitLine\": {\n",
       "                \"show\": false,\n",
       "                \"lineStyle\": {\n",
       "                    \"show\": true,\n",
       "                    \"width\": 1,\n",
       "                    \"opacity\": 1,\n",
       "                    \"curveness\": 0,\n",
       "                    \"type\": \"solid\"\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    ]\n",
       "};\n",
       "                chart_719022ecb01c4b5080d08a6244c3dbaf.setOption(option_719022ecb01c4b5080d08a6244c3dbaf);\n",
       "        });\n",
       "    </script>\n"
      ],
      "text/plain": [
       "<pyecharts.render.display.HTML at 0x209c7768a30>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bar.render_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
